Strategy¶

In [1]:
import pandas as pd
import yfinance as yf
import numpy as np
import datetime
from plotly import __version__
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import cufflinks as cf
init_notebook_mode(connected=True)
cf.go_offline()
In [2]:
def load_data_intraday(filename):
    
    data = pd.read_csv(filename, 
                       usecols=['Date','Time','Open','High','Low','Close','Up','Down'], 
                       parse_dates=[['Date', 'Time']], )
    data.columns = ["date_time","open","high","low","close","up","down"]
    data.set_index('date_time', inplace = True)
    data['volume'] = data['up'] + data['down']
    data.drop(['up','down'],axis=1,inplace=True)
    data["dayofweek"] = data.index.dayofweek
    data["day"] = data.index.day
    data["month"] = data.index.month
    data["year"] = data.index.year
    data["dayofyear"] = data.index.dayofyear
    data["quarter"] = data.index.quarter
    data["hour"] = data.index.hour
    data["minute"] = data.index.minute
    return data
In [3]:
def load_data_new(filename):
    data = pd.read_csv(filename, parse_dates=['date_time'], index_col='date_time')
    return data

dataset1 = load_data_new('PLATINUMmerged_60min.txt')
In [4]:
def YF_data(ticker,name,start,end):
    data = yf.download(ticker, start=start, end=end, interval="60m")
    data.index = data.index.tz_localize(None)  # Remove timezone information
    data = data.drop(["Adj Close"], axis=1)
    data["open"] = data["Open"]
    data["high"] = data["High"]
    data["low"] = data["Low"]
    data["close"] = data["Close"]
    data["volume"] = data["Volume"]
    data = data.drop(["Open", "High", "Low", "Close", "Volume"], axis=1)
    data["dayofweek"] = data.index.dayofweek
    data["day"] = data.index.day
    data["month"] = data.index.month
    data["year"] = data.index.year
    data["dayofyear"] = data.index.dayofyear
    data["quarter"] = data.index.quarter
    data["hour"] = data.index.hour
    data["minute"] = data.index.minute
    data = data.rename_axis("date_time")
    
    save = data.to_csv(name)
    return data
In [5]:
def strategy_vs_hold(dataset, hour_entry, hour_exit, name):
    dataset["ret"] = dataset.close.pct_change()
    dataset["mp"] = np.where((dataset["hour"] > hour_entry) | (dataset["hour"] < hour_exit), 1, 0)
    dataset["Portfolio ret"] = dataset["ret"] * dataset["mp"]

    df = pd.DataFrame({
        "STRATEGY" + name: dataset["Portfolio ret"].cumsum(),
        "HOLD"+ name: dataset["ret"].cumsum()
    })
    
    df.iplot(kind = "line", title="STRATEGY VS HOLD " +name, colors = ["orange","blue"], theme="white")

    
    return df
In [6]:
dataset2 = load_data_intraday('@HG_60min_Exchange.txt')
copperdata = strategy_vs_hold(dataset2, 8, 0, name= "Copper")
In [7]:
dataset2 = load_data_intraday('@PL_60min_Exchange.txt')
platinumdata = strategy_vs_hold(dataset2, 10, 3, name="Platinum")
In [11]:
dataset3 = YF_data("PL=F",'PL_60min.txt', start="2022-03-01", end="2024-01-01")
platinumdata_now = strategy_vs_hold(dataset3, 10, 3, name="Platinum")
[*********************100%%**********************]  1 of 1 completed
In [12]:
dataset4 = YF_data("HG=F",'HG_60min.txt',start="2022-03-01", end="2024-01-01")
copperdata_now = strategy_vs_hold(dataset4, 8, 0, name="Copper")
[*********************100%%**********************]  1 of 1 completed
In [14]:
dataset5 = YF_data("HG=F",'HG_60min_lastmonth.txt',start="2024-01-10", end="2024-02-18")
copperdata_now = strategy_vs_hold(dataset4, 8, 0, name="Copper")
[*********************100%%**********************]  1 of 1 completed
In [15]:
dataset6 = YF_data("PL=F",'PL_60min_lastmonth.txt', start="2024-01-10", end="2024-02-18")
platinumdata_now = strategy_vs_hold(dataset3, 10, 3, name="Platinum")
[*********************100%%**********************]  1 of 1 completed